﻿/**
 * @file camerawidget.h
 * @author tjc
 * @brief 摄像头控制模块
 * @version 1.0
 * @date 2024-3-3
 */

#ifndef CAMERAWIDGET_H
#define CAMERAWIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QComboBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QCamera>//摄像头
#include <QCameraImageCapture>//摄像截图
#include <QCameraViewfinder>//摄像取景器
#include <QCameraInfo> //摄像头信息
#include <QMessageBox>
#include <QStackedWidget>
#include <QFileDialog>
#include <QStandardPaths>
#include <QDateTime>
#include "tcpserver.h"
#include "common.h"
class CameraWidget : public QWidget
{
    Q_OBJECT
public:
    explicit CameraWidget(QWidget *parent = 0);
    //摄像头
    QCamera *curCamera;
    //抓图
    QCameraImageCapture * imageCapture;
    //取景器
    QCameraViewfinder *viewFinder;
    //存储摄像头设备
    QComboBox *cameraComboBox;
    //承载摄像头显示组件
    QWidget *cameraShowWidget;
    //承载截图后的组件
    QLabel *cameraLabel;
    //摄像后开关按钮
    QPushButton *openButton;
    bool isOpen;
    //截图按钮
    QPushButton *screenshotButton;
    //FuTcpServer
    FuTcpServer *fuTcpServer;
    //初始化摄像头
    void initCamera();
    //初始化静态抓图
    void initImageCapture();
    //摄像头资源释放
    void cleanupCamera();
    //重新初始化摄像头
    void reinitCamera();
    //回复摄像头控制指令后的处理
    void openCameraAfterOn(const QByteArray &ack);
    void openCameraAfterOff(const QByteArray &ack);
    //回复截图控制指令后的处理
    void imageCaptureAfter(const QByteArray &ack);
    ~CameraWidget();
public slots:
    //抓图准备槽函数
    void slot_imageReadyForCapture(bool ready);
    //抓图后槽函数
    void slot_imageCapturedAfter(int id,const QImage &preview);
    //抓图后文件保存完成的槽函数
    void slot_imageSaved(int id, const QString &fileName);
    //打开摄像头的槽函数,发送控制指令
    void slot_switchCamera();
    //截图槽函数,发送控制指令
    void slot_imageCaptured();
};
#endif // CAMERAWIDGET_H
